#生成器
"""
定义：生成器是特定的迭代器
生成器只会一个一个地生成数据，始终只占用一个数据的空间
使用yield语句返回值，在每个结果中间挂起函数

"""
'''
def generate():
    yield 1
    return '出现异常'#yield后的return被视为StopIteration的报错说明
exp=generate()
print(exp)#<generator object generate at 0x0000028679A35D20>
print(next(exp))#1
print(next(exp))#StopIteration：出现异常
'''
"""
def generate2():
    print('这是一个生成器')
    i=0
    while i<=10:
        yield i
        i+=1
    return '生成结束'
exp=generate2()
for i in range(12):
    print(next(exp))
'''
这是一个生成器
0
1
2
3
4
5
6
7
8
9
10
Traceback (most recent call last):
  File "E:\python learning notes\学习笔记\2.7.py", line 26, in <module>
    print(next(exp))
          ~~~~^^^^^
StopIteration: 生成结束
'''
"""
#创建一个生成器表达式，只需要把列表推导式中的[]改成()
list1=[i**2 for i in range(1,6)]
print(list1)#[1, 4, 9, 16, 25]，这是列表推导式
generation=(i**2 for i in range(1,6))
print(generation)#<generator object <genexpr> at 0x0000022310799E50>
for i in range(5):
    print(next(generation))
'''
1
4
9
16
25
'''
